package cn.tedu.oop;
/*本类用于测试多态成员的使用情况*/
public class TestDemo2 {
    public static void main(String[] args) {
        //8.创建纯纯的子类对象
        Dog2 d = new Dog2();
        System.out.println(d.sum);//20
        d.eat();//小狗爱吃肉包子

        //9.创建多态对象 多态对象
        Animal2 a = new Dog2();
        /*多态中,成员变量使用的是父类的,看成父类类型*/
        System.out.println(a.sum);//10
        /*多态中,方法的声明使用的是父类的,方法体使用的是子类的*/
        a.eat();//小狗爱吃肉包子
        /*多态中,调用的静态方法是父类的,因为多态对象把自己看作是父类类型,直接使用父类中的静态资源*/
        a.play();//没有提示,玩啥都行 (子类没重写,用父类的方法,只能使用父类的引用,父类的方法体)
        Animal2.play();//或者使用类名.静态资源
        a.show();
        Animal2.show();



        d.play();//子类对象调用子类的静态方法
        Dog2.play();//(通过)通过子类名调用子类的静态方法(对象名或子类名)
        d.show();
        Dog2.show();
    }
}
//1.创建父类
class Animal2{
    //3.创建父类的成员变量
    int sum = 10;
    //4.创建父类的普通方法
    public void eat(){
        System.out.println("吃啥都行~");
    }
    //5.定义父类的静态方法
    public static void play(){
        System.out.println("玩啥都行~");
    }

    public static void show(){
        System.out.println("父类静态方法~");
    }



}
//2.创建子类
class Dog2 extends Animal2{  //边code,边apply to sentence and reality,,,
    //6.定义子类的成员变量
    int sum = 20;//如果子类没有成员变量,就用父类的
    //7.重写父类的方法
    @Override
    public void eat(){
        System.out.println("小狗爱吃肉包子");
    }
    //@Override
    /*这不是一个重写的方法,只是恰巧在两个类中出现了一模一样的两个静态方法
     * 注意:静态方法也属于静态资源,静态资源是属于类(属于类)的,只有一份  (在单独的类里面的静态资源,static资源只有一份,没有重写)
     * 在哪个类里定义,就作为哪个类的资源来使用,不存在重写的现象*/
    public static void play(){
        System.out.println("小狗爱玩飞盘~");
    }

    public static void show(){
        System.out.println("子类静态方法~");
    }

}